Sumário
Latrodectus é um downloader descoberto pela primeira vez pelo Walmart em outubro de 2023. O malware ficou muito famoso devido às suas semelhanças com o famoso malware IceDid, não apenas no código em si, mas também na infraestrutura, conforme relatado anteriormente pela Proofpoint e pelo Team Cymru S2.
O malware geralmente é entregue por meio de campanhas de spam por e-mail conduzidas por dois agentes de ameaças específicos: TA577 e TA578. Entre os vários recursos que ele contém, está a capacidade de baixar e executar cargas adicionais, coletar e enviar informações do sistema para o C2, encerrar processos e muito mais. Em julho de 2024, Latrodectus também foi observado sendo entregue por um texugo BRC4.
Durante as atividades de caça do Threat Labs, descobrimos uma nova versão da carga útil do Latrodectus, a versão 1.4. As atualizações de malware incluem uma abordagem diferente de desofuscação de strings, um novo endpoint C2, dois novos comandos de backdoor e muito mais.
Neste blog, vamos nos concentrar nos recursos adicionados/atualizados nesta nova versão.
Análise de arquivos JavaScript
A primeira carga útil da cadeia de infecção é um arquivo JavaScript ofuscado usando uma abordagem semelhante usada por outras campanhas da Latrodectus. A técnica de ofuscação é empregada adicionando vários comentários ao arquivo, dificultando a análise e aumentando consideravelmente o tamanho do arquivo.
O código relevante está presente entre os comentários inúteis e, uma vez removido do arquivo, podemos ver o código que seria executado.
O malware procura linhas que começam com a string “/////”, as coloca em um buffer e as executa como uma função JS. A função executada então baixa um arquivo MSI de um servidor remoto e o executa/instala.
Análise do arquivo MSI
Uma vez executado/instalado, o arquivo MSI usa a ferramenta rundll32.exe do Windows para carregar uma DLL chamada “nvidia.dll” e chama uma função chamada “AnselEnableCheck” exportada por essa DLL. A DLL maliciosa é armazenada dentro de um arquivo CAB chamado “disk1”, presente no próprio arquivo MSI:
Análise criptográfica
Como uma tentativa de ofuscar a carga principal, o “nvidia.dll” arquivo usa um criptador chamado Dave. Esse criptador já existe há muito tempo e foi usado no passado por outros malwares, como Emotet, BlackBasta e versões anteriores do Latrodectus.
O criptador armazena a carga a ser executada em um recurso ou em uma seção. Na amostra analisada, a carga útil é armazenada em uma seção chamada “V+N”.
As etapas usadas para desofuscar, carregar e executar a carga final são bastante simples. O malware move uma chave para a pilha e resolve as funções da API do Windows VirtualAlloc, LoadLibrary e GetProcAddress.
Em seguida, ele aloca memória usando a função VirtualAlloc e executa uma operação XOR de vários bytes nos dados da seção mencionada usando a chave definida anteriormente e o resultado da operação é a carga útil final. As próximas etapas envolvem alinhar a carga útil na memória e chamar sua função principal.
Como o criptografador primeiro copia a carga original para a memória alocada antes que as outras etapas sejam executadas, pode-se simplesmente despejar o conteúdo da primeira memória alocada e obter a carga final. Um script para descompactar/desofuscar estaticamente as cargas úteis do Latrodectus usando o Dave crypter pode ser encontrado aqui.
A carga final é uma DLL e sua função dllMain é chamada pelo código criptografador. A próxima etapa é a execução da função exportada “AnselEnableCheck”, que é responsável pela execução da carga final.
Ao analisar a carga útil final, notamos que ela tem várias funções exportadas, mas, como todas elas têm o mesmo RVA, não importa qual delas seja chamada.
Análise de DLL do Latrodectus
Como as características gerais da carga útil principal já foram descritas no passado por outros pesquisadores, as seções a seguir se concentrarão nas atualizações empregadas pela nova versão do Latrodectus.
Ofuscação de cordas
Diferentemente das versões anteriores que usavam uma operação XOR para desofuscar suas strings, a versão atualizada usa AES256 no modo CTR. A chave AES é codificada na própria função de desofuscação e o IV muda para cada string a ser descriptografada. A chave usada nas amostras analisadas é “d623b8ef6226cec3e24c55127de873e7839c776bb1a93b57b25fdbea0db68ea2”.
A função de desofuscação recebe dois parâmetros. O primeiro é um bloco de dados e o segundo, um buffer de saída. O bloco de dados é usado para armazenar informações usadas para descriptografar a string e segue o formato abaixo:
- Comprimento da string: 2 bytes
- IV: 16 bytes
- Cadeia de caracteres criptografada: tamanho especificado no primeiro campo
Uma coisa a notar é que, às vezes, haverá bytes extras após o conteúdo da string criptografada. A imagem a seguir é um exemplo desse bloco de dados:
ID da campanha
Na versão atual do malware, a função de geração de ID de campanha continua usando a mesma abordagem em que uma string de entrada é criptografada usando o algoritmo FNV. No entanto, uma nova string de entrada “Wiski” foi usada, resultando no hash 0x24e7ce9e como ID da campanha.
C2 communication
Para sua comunicação inicial com o servidor C2, o Latrodectus coleta muitas informações do sistema infectado, como nome de usuário, versão do sistema operacional e endereço MAC. As informações são formatadas usando um padrão específico, criptografadas usando o algoritmo RC4, codificadas usando base64 e enviadas para o C2.
As chaves RC4 encontradas nas amostras analisadas foram “2sDBSEUXvhgloo4irt8af6el3jj0m1mowxyao00nn6zujtjxwb” e “kcyba7ibadohw5ztcv09vmf8gymr38eu7ogdfd7pyreltpkh1g”.
Durante a formatação dos dados, podemos sinalizar o número de versão 1.4 que está sendo definido.
As informações são enviadas no corpo HTTP por meio de uma solicitação HTTP POST. O endpoint usado nas novas variantes é “/test” em vez de “/live”, conforme observado nas versões anteriores. Embora seja um indicador muito fraco, o uso desse endpoint específico pode indicar que se trata de uma versão de teste do malware.
Comandos
Na versão 1.4, o Latrodectus introduziu dois novos comandos em sua carga: ID de comando 22 e 25.
Comando 0x16
Neste comando, o malware baixa um shellcode do servidor especificado e o executa por meio de um novo thread.
A diferença entre esse comando e o comando 14 é que uma função que executa a codificação base64 é passada como um parâmetro para o próprio shellcode. O endereço da função base64 é armazenado em uma visualização de arquivo mapeada chamada “12345”.
Comando 0x19
Nesse comando, o malware recebe um nome de arquivo e um local remoto para baixar o arquivo. O nome do arquivo é então anexado a %AppData%, o arquivo é baixado e seu conteúdo gravado no caminho mencionado.
Considerando essas adições, abaixo está uma tabela dos comandos atualizados suportados pelo malware:
ID do comando | Description |
---|---|
2 | Colete uma lista de nomes de arquivos da área de trabalho |
3 | Colete informações sobre os processos em execução |
4 | Coletar informações do sistema |
12 | Baixe e execute um executável normal |
13 | Baixe e execute uma DLL via rundll32 |
14 | Baixe e execute um shellcode |
15 | Atualização automática |
17 | Terminar a si mesmo |
18 | Baixe e execute a carga útil do IceDid |
19 | Aumente o tempo limite de sono |
20 | Redefinir contador de solicitações |
21 | Baixe e execute o módulo stealer |
22 | Baixe e execute um shellcode passando a função de codificação base64 como parâmetro |
25 | Baixe um arquivo para o diretório %AppData% |
Netskope Detection
- Proteção Contra Ameaças Netskope
- Gen:Variant.Ulise.493872
- Trojan.Generic.36724146
- Netskope Advanced Threat Protection provides proactive coverage against this threat.
- Win64.Trojan.ShellCoexec
Conclusões
O Latrodectus vem evoluindo muito rápido, adicionando novos recursos à sua carga útil. A compreensão das atualizações aplicadas à sua carga útil permite que os defensores mantenham os pipelines automatizados configurados adequadamente, bem como usem as informações para procurar novas variantes. O Netskope Threat Labs continuará a acompanhar a evolução do Latrodectus e seu TTP.
IOCs
Todos os IOCs e scripts relacionados a esse malware podem ser encontrados em nosso repositório GitHub.